package repproyectobases;

import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Calendar;

/**
 * @web http://jc-mouse.blogspot.com/
 * @author Mouse
 * Clase encargada de la interaccion entre la interfaz y la base de datos
 */
public class Control {

    private Sql mySql = new Sql();
    //variables privadas
    private String ID_Cliente="";
    private String NumFactura="";
    private String x="";

    public String getX() 
    {
        return x;
    }

    public void setX(String x) 
    {
        this.x = x;
    }
    
    private iFactura Factura;
    private  Numero_a_Letra NL = new  Numero_a_Letra();

    public Control(){    
    }

    public boolean existe_cliente(String ID){
        this.ID_Cliente=ID;
        return mySql.existe("ID", " from clientes where id='"+ID+"';");
    }

    public String getNameEmpleado(String x)
    {
        return mySql.getCodEmpleado(x);
    }
    
    public String getNameCliente(String x)
    {        
        return mySql.getCodCleinte(x);
    }

    public Object[] getID_Producto(){
        return mySql.GetColumna("producto", "id", "select id from producto;");
    }

    public Object[][] getDataProducto(String idProducto){
        String[] columnas={"nombre","precio","cantidad"};
        Object[][] data = mySql.GetTabla(columnas, "repuestos", "select nombre,precio,cantidad from repuestos where idrepuestos='"+idProducto+"';");
        return data;
    }

    //devuelve un codigo de 10 caracteres alfabeticos al azar
    public String GenerarNumFactura(){
        String cod="FACT-";
        for(int i=1; i<=5;i++){
           int num = (int)((Math.random()*(90-65))+65);
           cod = cod  + (char) num;
        }
        NumFactura = cod;
        return cod;
    }
    
    public int generarCodPedido()
    {
        String cod="";
        for(int i=1; i<=5;i++){
           int num = (int)((Math.random()*(12)));
           cod += num;
        }
        NumFactura = cod;
        return Integer.parseInt(cod);
    }
    
    public int disminuirStock(int num, int id)
    {
        return mySql.alterStock(num, id);
    }

    public String getNumFactura(){
        return this.NumFactura;
    }

    public void crearFactura(String numFact, String obs)
    {
        Calendar cal=Calendar.getInstance();
        long time=cal.getTimeInMillis();
        Timestamp ts= new Timestamp(time);
        mySql.crearFactura(numFact, ts, obs);
        //System.out.println("SuF");
    }
    
    public void crearPedido(int idpedido, int emple, int client)
    {
        Calendar cal=Calendar.getInstance();
        long time=cal.getTimeInMillis();
        java.sql.Date da = new java.sql.Date(time);
        mySql.crearPedido(idpedido, emple, da, client);
        //System.out.println("SuP");
    }

    public boolean Actualizar_Observaciones(String obs){
        String[] datos = {obs,this.NumFactura};
        return mySql.Ejecutar_Insruccion_Sql(datos, "update facturaventa set observacion=? where idfactura=?;");
    }

    //registra un producto en la tabla detalle, pero tambien actualiza la cantidad de la tabla producto
    public boolean registrarDetallePedido(int id,String cant,String valo, Double tot, int repuesto, int pedido, String factu)
    {
        return mySql.registrarDetallePedido(id, cant, valo, tot, repuesto, pedido, factu);
    }

     public Object[][] getDetalle(String nFactura){
        String[] columnas={"id_producto","cantidad","precioU","total"};
        Object[][] data = mySql.GetTabla(columnas, "detalle where num_factura='"+nFactura+"';", "select * from detalle where num_factura='"+nFactura+"';");
        return data;
    }

    public Object[][] getClientes(){
        String[] columnas={"ID","nombre","direccion","persona_telefono"};
        Object[][] data = mySql.GetTabla(columnas, "clientes", "select * from clientes;");
        return data;
    }

    public Double getTotal(){
        return mySql.GetDataDouble("t", "select round( sum( total ) , 1 ) as t from detallepedido where facturaventa_idfactura='"+this.NumFactura+"';");
    }

    public void VerFactura(){
        String Total = getTotal()+"";
        Factura = new iFactura();
        String x=NL.Convertir(Total, true);
        System.out.println(x);
        //Factura.ver_Factura( NumFactura, NL.Convertir(Total, true) , Total);
    }
    
    public ArrayList<String> getComboCliente()
    {
        return mySql.GetComboCliente();
    }
    
    public ArrayList<String> getIdRepuestos()
    {
        return mySql.getIdNombreRepuesto();
    }
    
    
    public String[] getMasterColumnNames(int view)
    {
        x="";
        
        switch (view)
        {
            case 1:
                x="select fv.idfactura,fv.`fechaCompra`,fv.observacion,pE.cedula as cedulaE, CONCAT( pE.nombre ,' ', pE.apellido) as nombreEmpleado,pC.cedula as cedulaC,\n"+
                  "CONCAT(pC.nombre,' ',pC.apellido) as nombreCliente,r.idrepuestos,r.nombre as nombreRepuesto,dtp.cantidad,dtp.valorunidad,dtp.total\n"+
                  "from pedido p join empleados em on p.empleados_codigo=em.codigo join persona pE on em.persona_cedula= pE.cedula\n"+
                  "join cliente c on c.codigo = p.cliente_codigo join  persona pC on pC.cedula=c.persona_cedula join detallepedido dtp on dtp.pedido_idpedido1=p.idpedido\n"+
                  "join repuestos r on r.idrepuestos=dtp.repuestos_idrepuestos1 join facturaventa fv on fv.idfactura=dtp.facturaventa_idfactura;";
                System.out.println("Case 1: "+x);
                return mySql.masterColumnNames(x);
            case 2:
                x="select p.cedula,p.nombre,p.apellido,p.telefono,p.correo,p.sexo,p.edad,d.direccion, c.nombre as Ciudad,de.nombre as Departamento\n"+
                  "from persona p join direccion d on d.iddireccion=p.direccion_iddireccion\n"+ 
                  "join ciudad c on c.idciudad=d.ciudad_idciudad join departamento de on de.iddepartamento=c.`idDepartamento`\n"+
                  "join empleados e on e.persona_cedula=p.cedula;";
                System.out.println("Case 2: "+x);
                return mySql.masterColumnNames(x);
            case 3:
                x="select p.cedula,p.nombre,p.apellido,p.telefono,p.correo,p.sexo,p.edad,d.direccion, c.nombre as Ciudad,de.nombre as Departamento\n"+
                  "from persona p join direccion d on d.iddireccion=p.direccion_iddireccion\n"+ 
                  "join ciudad c on c.idciudad=d.ciudad_idciudad join departamento de on de.iddepartamento=c.`idDepartamento`\n"+
                  "join cliente cli on cli.persona_cedula=p.cedula;";
                System.out.println("Case 3: "+x);
                return mySql.masterColumnNames(x);
            case 4:
                x="select r.nombre,r.descripcion,r.precio,r.cantidad,co.descripcion as color, t.descripcion as tipo from"+
                  "(((repuestos r join colores co on co.idcolores=r.colores_idcolores) join tipo t on t.idtipo=r.tipo_idtipo)"+
                  "join marcar mr on mr.repuestos_idrepuestos=r.idrepuestos);";
                System.out.println("Case 4: "+x);
                return mySql.masterColumnNames(x);
            case 5:
                x="select mt.cilindraje as Cilindraje, mm.descripcion as Descripcion,m.descripcion as Marca, t.descripcion as Tipo from"+ 
                  "(((moto mt join modelom mm on mm.idmodelom=mt.modelom_idmodelom) join tipom t on t.idtipo=mt.tipom_idtipo)"+
                  "join marca m on m.idmarca=mm.marca_idmarca);";
                System.out.println("Case 5: "+x);
                return mySql.masterColumnNames(x);
            case 6:
                x="select pr.nombre,pr.telefono,pr.correo,d.direccion,c.nombre as ciudad, dep.nombre as departamento from"+
                  "(((proveedor pr join direccion d on d.iddireccion=pr.direccion_iddireccion) join ciudad c on c.idciudad=d.ciudad_idciudad)"+ 
                  "join departamento dep  on dep.iddepartamento=c.idDepartamento);";
                System.out.println("Case 6: "+x);
                return mySql.masterColumnNames(x);
        }
        
        return null;
    }
    
    public ArrayList<Object[]> getMasterGetTabla(String col[],String sql,int x)
    {
        return mySql.masterGetTabla(col, sql, x);
    }
}
